package com.zzyl.web.qianfantest;

import cn.hutool.core.io.IoUtil;
import com.baidubce.qianfan.Qianfan;
import com.baidubce.qianfan.model.chat.ChatResponse;
import com.zzyl.common.constant.CacheConstants;
import com.zzyl.framework.ai.AiInvoke;
import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;

/**
 * 千帆大模型SDK调用测试
 *
 * @Author mr.lcc
 * @Data 2025/5/20 10:28
 */
@SpringBootTest
public class QianFanDemo {

    @Autowired
    private AiInvoke aiInvoke;

    @Autowired
    private RedisTemplate redisTemplate;

    @DisplayName("千帆大模型调用测试")
    @Test
    public void testQianFan() {
        /**
         * 参数1：认证类型，固定选择 Auth.TYPE_OAUTH
         * 参数2和3：AK和SK从这里获取：https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application/v1
         */
        // 指定模型
        ChatResponse response = new Qianfan().chatCompletion()
                .model("ERNIE-4.0-8K") // 使用model指定预置模型
                .addMessage("user", "你好，说出几个今天国内外最新新闻") // 添加用户消息 (此方法可以调用多次，以实现多轮对话的消息传递)
                .temperature(0.7) // 自定义超参数
                .execute(); // 发起请求
        System.out.println(response.getResult());
    }

    @DisplayName("千帆大模型调用测试单轮测试")
    @Test
    public void testQianFan2() {
        String result = aiInvoke.invokeQianFanChat("你好，请问航空港今天多少度，最近什么时候降温？");
        System.out.println(result);
    }

    @DisplayName("千帆大模型调用测试体检报告测试")
    @Test
    public void testQianFan3() {
        // 1.获取缓存中的体检报告单信息
        String pdfText = (String) redisTemplate.opsForHash().get(CacheConstants.HEALTH_ASSESSMENT_TEXT_KEY, "410225200204047181");
        // 2.获取resources中的prompt.txt文件
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("prompt.txt");
        String template = IoUtil.read(inputStream, StandardCharsets.UTF_8);
        // 3.拼贴模版提示词
        String prompt = template.replace("prompt", pdfText);
        // 4.调用千帆千帆模型
        String result = aiInvoke.invokeQianFanChat(prompt);
        // 5.结果处理
        System.out.println(result);
    }

}
